const api = require('../../utils/api.js')

Page({
  data: {
    admin: {
      username: '',
      nickname: '',
      password: '',
      confirmPassword: '',
      status: 1
    },
    showPassword: false,
    showConfirmPassword: false,
    permissionModules: [
      { key: 'product_manage', name: '产品管理' },
      { key: 'model_manage', name: '型号管理' },
      { key: 'process_manage', name: '工序管理' },
      { key: 'price_manage', name: '价格管理' },
      { key: 'order_manage', name: '订单管理' },
      { key: 'allocation_manage', name: '分工管理' },
      { key: 'report_manage', name: '报工管理' },
      { key: 'active_report_manage', name: '主动报工管理' },
      { key: 'production_plan_manage', name: '生产计划管理' },
      { key: 'admin_manage', name: '管理员管理' }
    ],
    permissionActions: [
      { key: 'view', name: '查看' },
      { key: 'add', name: '新增' },
      { key: 'edit', name: '编辑' },
      { key: 'delete', name: '删除' },
      { key: 'batch', name: '批量操作' },
      { key: 'audit', name: '审核' }
    ]
  },

  onLoad() {
    // 初始化默认权限
    this.initDefaultPermissions()
  },

  // 初始化默认权限
  initDefaultPermissions() {
    const permissions = {}
    this.data.permissionModules.forEach(module => {
      permissions[module.key] = ['view'] // 默认只有查看权限
    })
    
    console.log('初始化权限模块:', this.data.permissionModules)
    console.log('初始化权限配置:', permissions)
    
    this.setData({
      'admin.permissions': permissions
    })
  },

  // 输入框变化处理
  onInputChange(e) {
    const field = e.currentTarget.dataset.field
    const value = e.detail.value
    
    this.setData({
      [`admin.${field}`]: value
    })
  },

  // 状态选择器变化处理
  onStatusPickerChange(e) {
    this.setData({
      'admin.status': parseInt(e.detail.value)
    })
  },

  // 切换密码显示/隐藏
  togglePasswordVisibility() {
    this.setData({
      showPassword: !this.data.showPassword
    })
  },

  // 切换确认密码显示/隐藏
  toggleConfirmPasswordVisibility() {
    this.setData({
      showConfirmPassword: !this.data.showConfirmPassword
    })
  },

  // 权限选择处理
  onPermissionChange(e) {
    const { module, action } = e.currentTarget.dataset
    const permissions = { ...this.data.admin.permissions }
    
    // 确保模块权限数组存在
    if (!permissions[module] || !Array.isArray(permissions[module])) {
      permissions[module] = []
    }
    
    const index = permissions[module].indexOf(action)
    if (index > -1) {
      permissions[module].splice(index, 1)
    } else {
      permissions[module].push(action)
    }
    
    // 确保view权限始终存在
    if (permissions[module].length > 0 && !permissions[module].includes('view')) {
      permissions[module].unshift('view')
    }
    
    this.setData({
      'admin.permissions': permissions
    })
  },

  // 检查权限是否被选中
  isPermissionSelected(module, action) {
    const permissions = this.data.admin.permissions || {}
    const modulePermissions = permissions[module] || []
    return Array.isArray(modulePermissions) && modulePermissions.includes(action)
  },

  // 获取权限动作的详细说明
  getActionDescription(actionKey) {
    const descriptions = {
      'view': '查看数据',
      'add': '创建数据',
      'edit': '修改数据',
      'delete': '删除数据',
      'batch': '批量处理',
      'audit': '审核数据'
    }
    return descriptions[actionKey] || '未知权限'
  },

  // 保存管理员
  async onSave() {
    const admin = this.data.admin
    
    // 验证必填字段
    if (!admin.username.trim()) {
      wx.showToast({
        title: '请输入用户名',
        icon: 'none'
      })
      return
    }
    
    if (!admin.nickname.trim()) {
      wx.showToast({
        title: '请输入昵称',
        icon: 'none'
      })
      return
    }
    
    if (!admin.password.trim()) {
      wx.showToast({
        title: '请输入密码',
        icon: 'none'
      })
      return
    }
    
    if (admin.password !== admin.confirmPassword) {
      wx.showToast({
        title: '两次输入的密码不一致',
        icon: 'none'
      })
      return
    }
    
    // 确保每个模块至少包含view权限（除了price_manage）
    if (admin.permissions) {
      this.data.permissionModules.forEach(module => {
        // price_manage 模块不强制添加查看权限
        if (module.key === 'price_manage') {
          // 如果权限为空，保持为空数组
          if (!admin.permissions[module.key] || !Array.isArray(admin.permissions[module.key])) {
            admin.permissions[module.key] = []
          }
        } else {
          // 其他模块确保至少包含view权限
          if (!admin.permissions[module.key] || admin.permissions[module.key].length === 0) {
            admin.permissions[module.key] = ['view']
          } else if (!admin.permissions[module.key].includes('view')) {
            admin.permissions[module.key].unshift('view')
          }
        }
      })
    }
    
    try {
      wx.showLoading({
        title: '保存中...'
      })
      
      const app = getApp()
      const globalData = app ? app.globalData : { token: '', baseUrl: '' }
      
      // 先创建管理员基本信息（不包含权限）
      const basicInfo = {
        username: admin.username,
        nickname: admin.nickname,
        password: admin.password,
        status: admin.status
      }
      
      const result = await new Promise((resolve, reject) => {
        wx.request({
          url: globalData.baseUrl + '/createAdmin',
          method: 'POST',
          data: basicInfo,
          header: {
            'content-type': 'application/json',
            'Authorization': globalData.token ? 'Bearer ' + globalData.token : ''
          },
          success: (res) => {
            if (res.statusCode === 200) {
              resolve(res.data)
            } else {
              reject(res)
            }
          },
          fail: reject
        })
      })
      
      if (result.code === 1) {
        // 管理员创建成功，现在设置权限
        console.log('管理员创建成功，开始设置权限')
        console.log('新管理员ID:', result.data.id)
        console.log('权限数据:', admin.permissions)
        
        // 将权限数据转换为新权限系统格式
        const permissions = []
        if (admin.permissions) {
          Object.keys(admin.permissions).forEach(module => {
            const actions = admin.permissions[module]
            if (Array.isArray(actions)) {
              actions.forEach(action => {
                permissions.push(`${module}/${action}`)
              })
            }
          })
        }
        
        console.log('转换后的权限列表:', permissions)
        
        // 调用新的权限设置API
        const permissionResult = await new Promise((resolve, reject) => {
          wx.request({
            url: globalData.baseUrl + '/setAdminPermissions',
            method: 'POST',
            data: {
              admin_id: result.data.id,
              permissions: permissions
            },
            header: {
              'content-type': 'application/json',
              'Authorization': globalData.token ? 'Bearer ' + globalData.token : ''
            },
            success: (res) => {
              if (res.statusCode === 200) {
                resolve(res.data)
              } else {
                reject(res)
              }
            },
            fail: reject
          })
        })
        
        wx.hideLoading()
        
        if (permissionResult.code === 1) {
          wx.showToast({
            title: '创建成功',
            icon: 'success'
          })
          
          // 返回上一页并刷新数据
          setTimeout(() => {
            const pages = getCurrentPages()
            const prevPage = pages[pages.length - 2]
            if (prevPage && prevPage.loadData) {
              prevPage.loadData()
            }
            wx.navigateBack()
          }, 1500)
        } else {
          wx.showToast({
            title: permissionResult.msg || '权限设置失败',
            icon: 'none'
          })
        }
      } else {
        wx.hideLoading()
        wx.showToast({
          title: result.msg || '创建失败',
          icon: 'none'
        })
      }
    } catch (error) {
      wx.hideLoading()
      console.error('创建管理员失败:', error)
      wx.showToast({
        title: '创建失败',
        icon: 'none'
      })
    }
  },

  // 返回上一页
  onBack() {
    wx.navigateBack()
  }
})
